function maxAreaOfIsland(grid) {
  let maxArea = 0;

  // 定义深度优先搜索函数，计算当前岛屿的面积
  function dfs(i, j) {
    // 如果越界或者当前格子是水域，则返回面积0
    if (
      i < 0 ||
      i >= grid.length ||
      j < 0 ||
      j >= grid[0].length ||
      grid[i][j] === 0
    ) {
      return 0;
    }

    grid[i][j] = 0; // 标记为已访问，避免重复计算
    let area = 1; // 当前陆地格子的面积
    // 递归搜索相连的陆地格子，并将面积累加
    area += dfs(i + 1, j); // 向下搜索
    area += dfs(i - 1, j); // 向上搜索
    area += dfs(i, j + 1); // 向右搜索
    area += dfs(i, j - 1); // 向左搜索
    return area; // 返回当前岛屿的面积
  }

  // 遍历整个网格
  for (let i = 0; i < grid.length; i++) {
    for (let j = 0; j < grid[0].length; j++) {
      // 如果是陆地格子且未访问过，则以该格子为起点进行深度优先搜索
      if (grid[i][j] === 1) {
        // 计算以当前格子为起点的岛屿的面积，并更新最大面积
        maxArea = Math.max(maxArea, dfs(i, j));
      }
    }
  }

  return maxArea; // 返回所有岛屿中面积最大的值
}
const grid1 = [
  [1, 1, 0, 0, 0],
  [1, 1, 0, 0, 0],
  [0, 0, 0, 1, 1],
  [0, 0, 0, 1, 1],
];

const grid2 = [
  [1, 1, 0, 0, 0],
  [0, 1, 0, 0, 1],
  [0, 0, 0, 1, 1],
  [0, 0, 0, 1, 1],
];

const grid3 = [
  [1, 1, 0, 0, 0],
  [0, 0, 0, 0, 1],
  [0, 0, 0, 1, 1],
  [0, 0, 0, 1, 1],
];

console.log(maxAreaOfIsland(grid1)); // Output: 4
console.log(maxAreaOfIsland(grid2)); // Output: 4
console.log(maxAreaOfIsland(grid3)); // Output: 3
